Функция SETATREF. Справка Visio 2010

Главная страница /  Полезная информация по таблице свойств (ShapeSheet™)  / Справочник по таблице свойств  /  Список функций по алфавиту  / Список функций по категориям > Управление содержимым ячеек

Функция SETATREF

Перенаправляет обновленные значения, которые получены в результате действий, выполненных с помощью пользовательского интерфейса или автоматизации, в другую ячейку.

Синтаксис

SETATREF(reference [,set_expression [,ignore_eval]])

Parameters

Имя

Требуется/Необязательно

Тип данных

Описание

reference

Требуется

Строка

Ссылка на ячейку, в которую перенаправляются обновления.

set_expression

Необязательно

Строка

Выражение, присваиваемое аргументу reference.

ignore_eval

Необязательно

Логический

Если этот аргумент имеет значение ИСТИНА, функция SETATREF возвращает 0; в противном случае возвращается значение аргумента reference.

Заметки

Когда действие пользователя в окне документа или метод автоматизации приводят к тому, что Microsoft Visio обновляет ячейку с формулой SETATREF, значение перенаправляется в ячейку, на которую ссылается формула SETATREF (reference). Формула в ячейке, содержащей функцию SETATREF, остается прежней.

Если аргумент set_expression опущен, значение, заданное с помощью пользовательского интерфейса или автоматизации, присваивается ячейке, на которую указывает ссылка; в противном случае этой ячейке присваивается значение аргумента set_expression. Это позволяет изменить или преобразовать новое значение, прежде чем присвоить его ячейке по ссылке.

С функцией SETATREF связаны две другие функции:

*         функция SETATREFEXPR, которую можно использовать для представления нового значения в выражении set_expression (например, если аргумент set_expression содержит выражение SETATREFEXPR()-2 cm, из результата функции SETATREFEXPR вычитаются два сантиметра );

*         функция SETATREFEVAL, которая позволяет указать, что некоторую часть выражения set_expression следует вычислить и заменить ее результатами.

Функция SETATREF предназначена для использования в ячейках, которые могут быть изменены в результате действий пользователя в окне документа. Поддерживаются такие типы ячеек:

*         раздел преобразования фигуры — ячейки Width, Height, Angle, PinX и PinY;

*         раздел преобразования текста — ячейки TxtWidth, TxtHeight, TxtAngle, TxtPinX и TxtPinY;

*         раздел одномерных конечных точек — ячейки BeginX, BeginY, EndX и EndY;

*         раздел элементов управления — ячейки Controls.X и Controls.Y;

*         раздел данных фигуры.

Поскольку функция SETATREF модифицирует место изменения значений ячеек, она влияет на запуск событий. Если ячейка содержит функцию SETATREF, события FormulaChanged и CellChanged запускаются для ячейки, указанной в функции SETATREF, а не для ячейки, содержащей эту функцию. Если ячейка, содержащая функцию SETATREF, содержит также функцию SETATREFEXPR, событие FormulaChanged запускается и для ячейки с функцией SETATREF, поскольку изменяется параметр функции.

Следует отметить еще ряд важных моментов, связанных с функцией SETATREF.

*         Функции SETATREF могут объединять в цепочку до 10 ссылок на другие функции SETATREF.

*         Ячейки могут содержать помимо функции SETATREF и другие выражения (в том числе несколько экземпляров SETATREF в одной ячейке).

*         Если фигуры склеены, Visio следует по цепочке ссылок SETATREF на том же листе и помещает склеенные формулы в ячейку, на которую указывает ссылка.

*         Средства автоматизации распознают функцию SETATREF и следуют по цепочке ячеек, на которые указывают ссылки.

*         Как и функция GUARD, SETATREF не защищает ячейки от изменений, сделанных с помощью функции SETF в таблице свойств фигуры.

Пример 1

Предположим, что у фигуры есть настраиваемое свойство ширины Width, а ячейка Width в разделе преобразования фигуры содержит следующую формулу:

=SETATREF(Prop.Width)

Если ширина фигуры изменяется в пользовательском интерфейсе, новое значение присваивается ячейке Prop.Width, а не ячейке Width в разделе преобразования фигуры. Формула в ячейке Width при этом не изменяется. Задать ширину фигуры также можно с помощью данных фигуры.

Пример 2

Решения Visio часто содержат фигуры с иерархической структурой отношений, т. е. при перемещении родительских фигур должны перемещаться и дочерние. В примере ниже показано, как можно управлять этими отношениями с помощью функции SETATREF в таблице свойств фигуры.

Указанные ниже формулы содержатся в разделе преобразования фигуры дочерней фигуры. Кроме того, определены пользовательские ячейки User.DeltaX и User.DeltaY, предназначенные для отслеживания величины перемещения родительской фигуры. В результате дочерняя фигура перемещается при перемещении родительской, а при перемещении дочерней фигуры иерархическая структура сохраняется.

PinX =SETATREF(User.DeltaX, SETATREFEVAL(SETATREFEXPR() - ParentShape!PinX)) + ParentShape!PinX

PinY =SETATREF(User.DeltaY, SETATREFEVAL(SETATREFEXPR() - ParentShape!PinY)) + ParentShape!PinY

При перемещении дочерней фигуры с помощью пользовательского интерфейса новые значения PinX и PinY задаются как параметры в функции SETATREFEXPR. Функция SETATREF вычисляет формулу, вложенную в функцию SETATREFEVAL, и заменяет параметры PinX и PinY результатами вычисления, а затем получившаяся формула присваивается пользовательским ячейкам, указанным в функции SETATREF (User.DeltaX и User.DeltaY). Наконец, значения, возвращенные функцией SETATREF (User.DeltaX и User.DeltaY), добавляются к координатам точки привязки родительской фигуры, чтобы вычислить точку привязки дочерней фигуры.


© Корпорация Майкрософт (Microsoft Corporation). Все права защищены.